#include "RegistroHash.h"
#include "../common/SerialInator.h"


RegistroHash::RegistroHash() :
	_clavePrimaria(0), _autor(""), _frase("")
{
}


RegistroHash::RegistroHash(unsigned long int clave, std::string autor, std::string frase) :
		_clavePrimaria(clave), _autor(autor), _frase(frase)
{
}


RegistroHash::RegistroHash(const RegistroHash& reg) :
		_clavePrimaria(reg._clavePrimaria),
		_autor(reg._autor), _frase(reg._frase)
{
}


unsigned long int RegistroHash::getClave() const{
	return this->_clavePrimaria;
}

void RegistroHash::setClave(unsigned long int c){
	this->_clavePrimaria = c;
}

std::string RegistroHash::getAutor() const{
	return this->_autor;
}

void RegistroHash::setAutor(std::string autor){
	this->_autor = autor;
}

std::string RegistroHash::getFrase() const{
	return this->_frase;
}

void RegistroHash::setFrase(std::string frase){
	this->_frase = frase;
}


int RegistroHash::getSize() const {
	int tam = sizeof(this->_clavePrimaria);
	tam += SerialInator::getSizeOf(this->_autor);
	tam += SerialInator::getSizeOf(this->_frase);

	return tam;
}


// Usados para la serializacion de los datos
int RegistroHash::serializar(char* arrBytes){
	SerialInator s;
	s.reset();

	s.serializar(arrBytes, this->_clavePrimaria);
	s.serializar(arrBytes, this->_autor);
	s.serializar(arrBytes, this->_frase);

	return s.getBufferSize();
}


int RegistroHash::desSerializar(char* arrBytes){
	SerialInator s;
	s.reset();

	s.desSerializar(arrBytes, this->_clavePrimaria);
	s.desSerializar(arrBytes, this->_autor);
	s.desSerializar(arrBytes, this->_frase);

	return s.getBufferSize();
}


void RegistroHash::ImprimirEn(std::ostream& out) const{
	out << this->_clavePrimaria << "| "
			<< this->_autor << "| "
			<< this->_frase;
}

